import pandas as pd
import geopandas as gpd  # 导入geopandas库
from shapely.geometry import Point  # 从shapely.geometry导入Point类

districts_gdf = gpd.read_file('data/bj_district.geoJson')
'''
district_boundaries = {
    '昌平区': {'lat_min': 40.1218111, 'lat_max': 40.3498370, 'lng_min': 116.1667170, 'lng_max': 116.3799390},
    '朝阳区': {'lat_min': 39.8498370, 'lat_max': 39.9753390, 'lng_min': 116.3253390, 'lng_max': 116.5883170},
    '大兴区': {'lat_min': 39.5253390, 'lat_max': 39.7498370, 'lng_min': 116.2218111, 'lng_max': 116.6499370},
    '东城区': {'lat_min': 39.9218111, 'lat_max': 39.9953390, 'lng_min': 116.2816170, 'lng_max': 116.4799390},
    '房山区': {'lat_min': 39.5498370, 'lat_max': 39.8498370, 'lng_min': 115.8316170, 'lng_max': 116.1683390},
    '丰台区': {'lat_min': 39.7218111, 'lat_max': 39.8953390, 'lng_min': 116.1583390, 'lng_max': 116.3816170},
    '海淀区': {'lat_min': 39.8748370, 'lat_max': 40.0953390, 'lng_min': 116.0498370, 'lng_max': 116.2683170},
    '怀柔区': {'lat_min': 40.2453390, 'lat_max': 40.7453390, 'lng_min': 116.3748370, 'lng_max': 117.2453390},
    '门头沟区': {'lat_min': 39.7453390, 'lat_max': 40.0453390, 'lng_min': 115.7218111, 'lng_max': 116.1016170},
    '密云区': {'lat_min': 40.3753390, 'lat_max': 40.8453390, 'lng_min': 116.6448370, 'lng_max': 117.3448370},
    '顺义区': {'lat_min': 40.0253390, 'lat_max': 40.2953390, 'lng_min': 116.4748370, 'lng_max': 116.9448370},
    '通州区': {'lat_min': 39.6448370, 'lat_max': 39.9153390, 'lng_min': 116.5448370, 'lng_max': 116.9316170},
    '西城区': {'lat_min': 39.8823370, 'lat_max': 39.9953390, 'lng_min': 116.2153390, 'lng_max': 116.3816170},
    '延庆区': {'lat_min': 40.3153390, 'lat_max': 40.7453390, 'lng_min': 115.5748370, 'lng_max': 116.0016170},
}'''

file_path = 'E:\\大二上\\Weiguan\\data\\路侧停车位基础信息.xlsx'
df = pd.read_excel(file_path, engine='openpyxl')

'''
def identify_district_by_coords(lat, lng):
    for district, boundaries in district_boundaries.items():
        if (boundaries['lat_min'] <= lat <= boundaries['lat_max'] and
            boundaries['lng_min'] <= lng <= boundaries['lng_max']):
            return district
    return "未知区域"
'''


# 根据经纬度识别所属区域
def identify_district_by_coords(lat, lng):
    point = Point(lng, lat)  # 创建Point对象
    for idx, row in districts_gdf.iterrows():
        if row['geometry'].contains(point):  # 检查点是否在多边形内
            return row['name']  # 假设GeoJSON文件中有一个'name'字段表示区的名称
    return "未知区域"  # 如果不在任何已知区域内，返回"未知区域"


df['区域'] = df.apply(lambda row: identify_district_by_coords(row['纬度'], row['经度']), axis=1)
total_parking_spaces_by_district = df.groupby('区域')['泊位数量'].sum().reset_index()
print(total_parking_spaces_by_district)

output_file_path = '各区车位总数.xlsx'
total_parking_spaces_by_district.to_excel(output_file_path, index=False, engine='openpyxl')
